最新AI論文をキャッチアップ

pyannote.audio:カスタマイズ可能で高精度な話者ダイアライゼーションフレームワークが登場!

pyannote.audio:カスタマイズ可能で高精度な話者ダイアライゼーションフレームワークが登場!

音声認識

3つの要点
✔️ 高精度な話者ダイアライゼーションのためのフレームワークを新たに提案
✔️ 自分のデータセットにより調整が可能
✔️ End-to-endな手法により,ほぼ全てのタスクにおいてstate-of-the-artを達成

pyannote.audio: neural building blocks for speaker diarization
written by Hervé BredinRuiqing YinJuan Manuel CoriaGregory GellyPavel KorshunovMarvin LavechinDiego FustesHadrien TiteuxWassim BouazizMarie-Philippe Gill
(Submitted on 4 Nov 2019)

Comments: Accepted to ICASSP2020
Subjects: Audio and Speech Processing (eess.AS); Sound (cs.SD)
Paper
Official Code COMM Code

はじめ

Pyannote.audioは話者ダイアライゼーション(Speaker Diarization)を実現するための、Pythonによるオープンソースフレームワークです。機械学習フレームワークであるPyTorchに基づき、一連の訓練可能なend-to-endなニューラルブロックを提供しており、話者ダイアライゼーションパイプラインを作るために組み合わせたり最適化したりすることができます。

また、Pyannote.audioは音声区間検出(Voice Activity Detection)や話者変化検出(Speaker Change Detection)、オーバーラップ発話検出(Overlapped Speech Detection)、話者埋め込み(Speaker Ebedding)という幅広い領域を網羅した訓練済みのモデルも提供しており、それらは非常に高いパフォーマンスを出しています。 

 

本フレームワークでは上図に示される話者ダイアライゼーションに必要な各プロセスに対応した機能を提供していますが、本記事ではそれらを実現するための仕組みについて言及しながら、上図のプロセスに従ってそれぞれについての説明をしていきます。

基本的な考え方

それぞれのタスクはシークエンスラベリングのタスクとして扱うことができ、インプットは、特徴ベクトルであるX = {x1、 x2、 。 。 。 、 xT }で、アウトプットはy = {y1、 y2、 。 。 。 、 yT }のラベルになります。また、yt ∈ [1; K] であり、クラスの数Kはタスクの種類によって変わります。したがって、ラベルyに応じた特徴Xにマッチしたニューラルネットワーク f : X → yを訓練します。実際のニューラルネットワークアーキテクチャ自体はユーザーが選ぶことができますが、Pyannote.audioはPyanNetベースの訓練済みPyTorchモデルを提供しています。

様々な長さの長い音声ファイルを利用することに実用的はないため、Pyannote.audioは固定長のサブシークエンスを利用しています。訓練時には、固定長のサブシークエンスはランダムに使われます。テスト時には、音声ファイルはオーバーラップしたスライド式の訓練時に使われた固定長のウィンドウを使用して加工されます。Step tのそれぞれの時間において、いくつかのオーバーラップしたシークエンスであるK次元の予測値の結果を返し、それぞれのクラスの平均的な最終スコアを得ることができます。

アーキテクチャ

ニューラルネットワークのアーキテクチャは、下図で示されるPyanNetアーキテクチャに従っています。シークエンスラベリングタスクはMFCCやSincNetによる特徴量を用いて2秒の音声で訓練されています。End-to-endな変数は基本的に話者埋め込みを除いてすべてのタスクにおいて手作りの特徴量に元図板ものよりも高いパフォーマンスを誇り、ほとんどのケースにおいて新たなstate-of-the-artなパフォーマンスを定義したと言ってもよいでしょう。

 

 

残りのネットワークは2つのLSTMリカレント層(forward、 backward方向にそれぞれ128ユニット)や、no temporal プーリング、2つのfeed-forward層(活性化関数tanhによる128ユニット)、最終分類層(128ユニットではなく512ユニット)から成っています。話者埋め込みでは少し広く(128ユニットではなく512ユニット)少し深い(2つではなく3つのリカレント層)ネットワークを利用し、x-vectorを使用しています。また、500ミリ秒よりも短い音声で訓練しています。 

Feature Extraction

Pyannote.audioがwaveファイルから直接モデルを訓練することをサポートしている一方で、Pyannote.audio。featuresモジュールはlibrosaライブラリで利用できるMFCCやスペクトログラムなどの標準的な特徴抽出の仕組みも提供しています。それらは同じFeatureExtractionクラスに属しており、柔軟なData Augmentationに対応し、ニューラルネットワークを訓練することができます。例えば、MUSANなどのデータベースのランダムな音声から特徴を抽出できます。他のツールでは一般的には元の音声ファイルの限られた数のData Augmentationしかできませんが、Pyannote.audioでは際限なく柔軟なData Augmentationを実行することができます。  

Voice activity detection

Voice activity detectionは与えられた音声ストリーム中から音声を検出するタスクです。Pyannote.audioでは無音区間をyt=0、 音声区間をyt=1とし、クラス数を2として扱っています。訓練済みモデルも利用可能であり、state-of-the-artとなっています。

 

Speaker change detection

Speaker change detectionは与えられた音声ストリーム中における話者が変更したポイントを検出するタスクです。Pyannote.audioでは、話者の変化がなければyt=0、あればyt=1とし、クラス数を2として扱っています。不均衡データ問題やアノテーションミスに対応するために、話者変更点tの近傍のタイムステップ {t | |t − t ∗ | < δ} が訓練のためにpositiveとしてラベル付けされていいます。実用時には、δは200ミリ秒となります。訓練済みモデルも利用可能であり、state-of-the-artとなっています。 

Overlapped speech detection 

Overlapped speech detectionは少なくとも2人の話者が同時に話している区間を検出するタスクです。Pyannote.audioでは0人または1人の区間をyt=0、 2人以上の区間をyt=1とし、クラス数を2として扱っています。不均衡データ問題に対応するために、半分の訓練サブシークエンスは2つのランダムサブシークエンスの合計から人工的に作られています。 

 

Speaker EmbeddingとClustering 

Voice activity detectionと同様に、クラスタリングも話者ダイアライゼーションパイプラインのうち最も大事なパートであり、実際の話者認識に従った音声セグメントのグルーピングから成っています。2019年10月時点においてベストパフォーマンスの話者ダイアライゼーションシステムはx-vectorsをクラスタリングステップとして使用しています。それらは普通は固定長のスライドウィンドウから抽出され、また、似たマトリックスがprobabilistic linear discriminant analysis (PLDA)により得られます。こうしたx-vectorsやPLDAを実行する方法は既にオープンソースで沢山存在し、Pyannote.audioはこうしたアプローチをアップデートすることはしていません。 

代わりに、前もって決められたコサイン値に最適化した話者埋め込みの訓練を行うメトリック学習アプローチを使うことによって、クラスタリングステップを単純化し、PLDAなどの技術を使う必要性を減らしています。 この種のアプローチのための統合的フレームワークはPyannote.audio。embeddingが提供しています。他のブロックと同様に話者埋め込みも自作の特徴やend-to-endな手法によるwaveファイルから直接訓練させることもできます。訓練済みのend-to-endモデルはVox-Celeb話者認識タスクにおいてはstate-of-the-artとはいかないながらも、他のいくつかのタスクにおいてはstate-of-the-artを達成しています。

Re-segmentation

Re-segmentationはダイアライゼーションパイプラインによって得られた音声境界やラベルを洗練させるタスクです。これは教師なしタスクではありますが、Pyannote.audioでは話者がアクティブでないときはyt=0、 話者kがアクティブな場合にyt=kとし、クラス数をK=k+1としています。Re-segmentationステップは教師なしであるため、re-segmentationモデルを事前に訓練させることはできません。それぞれの音声ファイルに対して、新しいre-segmentationモデルがスクラッチから、訓練ラベルとしてのダイアライゼーションパイプラインの結果を使って訓練されます。一度多くのエポックで訓練されれば、モデルはまったく同じファイルに提供されます。それぞれのタイムステップは最も高い予測値と共にクラスに割り当てられます。これは下図に示されるように、非常に高い精度の改善がみられました。

 

その他

調整可能なパイプライン

それぞれのビルディングブロックは別個に訓練させる必要があるものの、Pyannote.audio。pipelineはそれらを組み合わせることで、誤り率を最小化するようハイパーパラメータを最適化させます。このジョイント型の最適化プロセスは通常より良い結果をもたらします。 

結果の再現性

Pyannote.audioは訓練、バリデーション、アプリケーションモジュールのための一連のコマンドラインツールを提供しています。また、pyannote.metricsによって再現可能な研究を促し、pyannote.databaseによってより良い機械学習の実行を可能にします。また、それぞれのステップにおいてすでに論文中で報告したパフォーマンスの訓練済みモデルを提供しています。話者埋め込みはVoxCelebで訓練しテストしたものの、他の全てのモデルは会議データであるAMI、 ニュース放送であるETAPE、 11種類のドメインのDIHARDという幅広い範囲のドメインをカバーした3つのデータセットによって訓練し、調整し、テストしています。

まとめ

本記事では、話者ダイアライゼーションのための、カスタマイズ性が高く、また高精度で簡単に利用可能なフレームワークであるPyannote.audioについてのご紹介をしました。各プロセスに対して新たにアプローチを考案していることが分かるかと思います。より詳細な情報や実装方法などはPyannote.audioのGithubレポジトリで知ることができますので、ご参照下さい。

記事の内容等について改善箇所などございましたら、
お問い合わせフォームよりAI-SCHOLAR編集部の方にご連絡を頂けますと幸いです。
どうぞよろしくお願いします。

お問い合わせする